﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static List<ClienteVO> getClientes()
        {
            return getClientes(false, null);
        }

        public static List<ClienteVO> getClientes(bool ativo)
        {
            return getClientes(ativo, null);
        }
        public static ClienteVO getCliente(int idCliente)
        {
            List<ClienteVO> listClienteVO = getClientes(false, idCliente);
            if (listClienteVO != null && listClienteVO.Count > 0)
                return listClienteVO[0];
            else
                return null;
        }

        public static List<ClienteVO> getClientes(bool ativo, int? idCliente)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdCliente, CPF, CNPJ, IE, IM, Nome, Endereco, EnderecoNumero, Complemento, Bairro, Cidade, UF, Pais, SMS, Email, Telefone1, Telefone2, Telefone3, Ativo, Contato, Responsavel");
            query.AppendLine("FROM cliente ");
            if (ativo)
            {
                query.AppendLine(where + " Ativo ");
                where = "AND ";
            }
            if (idCliente != null)
            {
                query.AppendLine(where + "IdCliente=?IdCliente");
                where = "AND ";
            }

            query.AppendLine("ORDER BY Nome ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idCliente != null) cmd.Parameters.AddWithValue("?IdCliente", idCliente);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<ClienteVO> listCliente = new List<ClienteVO>();

                while (reader.Read())
                {
                    ClienteVO clienteVO = ClienteVO.CreateClienteVO();
                    clienteVO.idCliente = reader.GetInt32("IdCliente");
                    clienteVO.CPF = reader.GetString("CPF");
                    clienteVO.CNPJ = reader.GetString("CNPJ");
                    clienteVO.IE = reader.GetString("IE");
                    clienteVO.IM = reader.GetString("IM");
                    clienteVO.nome = reader.GetString("Nome");
                    clienteVO.endereco = reader.GetString("Endereco");
                    clienteVO.enderecoNumero = reader.GetString("EnderecoNumero");
                    clienteVO.complemento = reader.GetString("Complemento");
                    clienteVO.bairro = reader.GetString("Bairro");
                    clienteVO.cidade = reader.GetString("Cidade");
                    clienteVO.UF = reader.GetString("UF");
                    clienteVO.pais = reader.GetString("Pais");
                    clienteVO.SMS = reader.GetString("SMS");
                    clienteVO.email = reader.GetString("Email");
                    clienteVO.telefone1 = reader.GetString("Telefone1");
                    clienteVO.telefone2 = reader.GetString("Telefone2");
                    clienteVO.telefone3 = reader.GetString("Telefone3");
                    clienteVO.ativo = reader.GetBoolean("Ativo");
                    clienteVO.contato = reader.GetString("Contato");
                    clienteVO.responsavel = reader.GetString("Responsavel");

                    listCliente.Add(clienteVO);
                }
                reader.Close();
                return listCliente;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setCliente(ClienteVO clienteVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE cliente ");
            query.AppendLine("SET CPF=?CPF, CNPJ=?CNPJ, IE=?IE, IM=?IM, Nome=?Nome, Endereco=?Endereco, EnderecoNumero=?EnderecoNumero, Complemento=?Complemento, Bairro=?Bairro, Cidade=?Cidade, UF=?UF, Pais=?Pais, SMS=?SMS, Email=?Email, Telefone1=?Telefone1, Telefone2=?Telefone2, Telefone3=?Telefone3, Ativo=?Ativo, Contato=?Contato, Responsavel=?Responsavel ");
            query.AppendLine("WHERE IdCliente=?IdCliente ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCliente", clienteVO.idCliente);
            cmd.Parameters.AddWithValue("?CPF", clienteVO.CPF);
            cmd.Parameters.AddWithValue("?CNPJ", clienteVO.CNPJ);
            cmd.Parameters.AddWithValue("?IE", clienteVO.IE);
            cmd.Parameters.AddWithValue("?IM", clienteVO.IM);
            cmd.Parameters.AddWithValue("?Nome", clienteVO.nome);
            cmd.Parameters.AddWithValue("?Endereco", clienteVO.endereco);
            cmd.Parameters.AddWithValue("?EnderecoNumero", clienteVO.enderecoNumero);
            cmd.Parameters.AddWithValue("?Complemento", clienteVO.complemento);
            cmd.Parameters.AddWithValue("?Bairro", clienteVO.bairro);
            cmd.Parameters.AddWithValue("?Cidade", clienteVO.cidade);
            cmd.Parameters.AddWithValue("?UF", clienteVO.UF);
            cmd.Parameters.AddWithValue("?Pais", clienteVO.pais);
            cmd.Parameters.AddWithValue("?SMS", clienteVO.SMS);
            cmd.Parameters.AddWithValue("?Email", clienteVO.email);
            cmd.Parameters.AddWithValue("?Telefone1", clienteVO.telefone1);
            cmd.Parameters.AddWithValue("?Telefone2", clienteVO.telefone2);
            cmd.Parameters.AddWithValue("?Telefone3", clienteVO.telefone3);
            cmd.Parameters.AddWithValue("?Ativo", clienteVO.ativo);
            cmd.Parameters.AddWithValue("?Contato", clienteVO.contato);
            cmd.Parameters.AddWithValue("?Responsavel", clienteVO.responsavel);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newCliente(ClienteVO clienteVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO cliente ");
            query.AppendLine("SET CPF=?CPF, CNPJ=?CNPJ, IE=?IE, IM=?IM, Nome=?Nome, Endereco=?Endereco, EnderecoNumero=?EnderecoNumero, Complemento=?Complemento, Bairro=?Bairro, Cidade=?Cidade, UF=?UF, Pais=?Pais, SMS=?SMS, Email=?Email, Telefone1=?Telefone1, Telefone2=?Telefone2, Telefone3=?Telefone3, Ativo=?Ativo, Contato=?Contato, Responsavel=?Responsavel ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?CPF", clienteVO.CPF);
            cmd.Parameters.AddWithValue("?CNPJ", clienteVO.CNPJ);
            cmd.Parameters.AddWithValue("?IE", clienteVO.IE);
            cmd.Parameters.AddWithValue("?IM", clienteVO.IM);
            cmd.Parameters.AddWithValue("?Nome", clienteVO.nome);
            cmd.Parameters.AddWithValue("?Endereco", clienteVO.endereco);
            cmd.Parameters.AddWithValue("?EnderecoNumero", clienteVO.enderecoNumero);
            cmd.Parameters.AddWithValue("?Complemento", clienteVO.complemento);
            cmd.Parameters.AddWithValue("?Bairro", clienteVO.bairro);
            cmd.Parameters.AddWithValue("?Cidade", clienteVO.cidade);
            cmd.Parameters.AddWithValue("?UF", clienteVO.UF);
            cmd.Parameters.AddWithValue("?Pais", clienteVO.pais);
            cmd.Parameters.AddWithValue("?SMS", clienteVO.SMS);
            cmd.Parameters.AddWithValue("?Email", clienteVO.email);
            cmd.Parameters.AddWithValue("?Telefone1", clienteVO.telefone1);
            cmd.Parameters.AddWithValue("?Telefone2", clienteVO.telefone2);
            cmd.Parameters.AddWithValue("?Telefone3", clienteVO.telefone3);
            cmd.Parameters.AddWithValue("?Ativo", clienteVO.ativo);
            cmd.Parameters.AddWithValue("?Contato", clienteVO.contato);
            cmd.Parameters.AddWithValue("?Responsavel", clienteVO.responsavel);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delCliente(ClienteVO clienteVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM cliente ");
            query.AppendLine("WHERE IdCliente=?IdCliente ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCliente", clienteVO.idCliente);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static bool readyToDeleteCliente(int idCliente)
        {
            int contagem = 0;

            MySqlDataReader reader = null;
            StringBuilder query = new StringBuilder();
            MySqlCommand cmd = getConnection();
            cmd.Connection.Open();

            try
            {

                query.AppendLine("SELECT count(*) contagem FROM alerta WHERE IdCliente=?IdCliente ");
                cmd.CommandText = query.ToString();
                cmd.Parameters.AddWithValue("?IdCliente", idCliente);
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem = reader.GetInt32("contagem");
                reader.Close();

                query = new StringBuilder();
                query.AppendLine("SELECT count(*) contagem FROM convenio WHERE IdCliente=?IdCliente ");
                cmd.CommandText = query.ToString();
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem += reader.GetInt32("contagem");
                reader.Close();

                query = new StringBuilder();
                query.AppendLine("SELECT count(*) contagem FROM mensalista WHERE IdCliente=?IdCliente ");
                cmd.CommandText = query.ToString();
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem += reader.GetInt32("contagem");
                reader.Close();

            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

            return contagem == 0;

        }
    
    
    }
}
